﻿using AutoMapper;
using ERPPublic;
using MediatR;
using Newtonsoft.Json;
using ProcurementManagement.Applcation.Command.ProcurementReturnCommand;
using ProcurementManagement.Domain.Dtos;
using ProcurementManagement.Domain.ProcurementDomain;
using ProcurementManagement.Infrstructre.Interface;
using SqlSugar;
using static ERPPublic.ParseAPI;

namespace ProcurementManagement.Applcation.CommandHanlers.ProcurementReturnCommandHandler
{
    public class FanProcurementReturnCommandHandler : IRequestHandler<FanProcurementReturnCommand, FanProcurementReturnProduct>
    {
        ISqlSugarClient db;
        IMapper mapper;
        IReturnProductRepository rpRep;
        IPurchaseReturnsRepository prRep;
        InterfaceVendorRepository vRep;

        public FanProcurementReturnCommandHandler(ISqlSugarClient db, IMapper mapper, IReturnProductRepository rpRep, IPurchaseReturnsRepository prRep, InterfaceVendorRepository vRep)
        {
            this.db = db;
            this.mapper = mapper;
            this.rpRep = rpRep;
            this.prRep = prRep;
            this.vRep = vRep;
        }

        public async Task<FanProcurementReturnProduct> Handle(FanProcurementReturnCommand request, CancellationToken cancellationToken)
        {
            List<Products> products = await GetProductList("", "", 1, 1000);
            var guan = (from g in await rpRep.GetAll() select g).ToList();
            var prucurement = (from a in await prRep.GetAll() select a).ToList();
            var vendor = (from v in await vRep.GetAll() select v).ToList();
            var list = (from a in prucurement
                        join v in vendor on a.VName equals v.VName
                        where a.PurchaseReturnsCode == request.PurchaseReturnsCode
                        select new FanProcurementReturnProduct
                        {
                            VName = a.VName,
                            PurchaseReturnsIds = a.PurchaseReturnsIds,
                            PurchaseReturnsCode = a.PurchaseReturnsCode,
                            PurchaseReturnsTopic = a.PurchaseReturnsTopic,
                            PReturnsPersonnel = a.PReturnsPersonnel,
                            ManpowerId = a.ManpowerId,
                            PRReturnDate = a.PRReturnDate,
                            PROutboundProgress = a.PROutboundProgress,
                            PRShipmentState = a.PRShipmentState,
                            PRReturnType = a.PRReturnType,
                            PPurchasingStaff = a.PPurchasingStaff,
                            PRtotalAmount = a.PRtotalAmount,
                            PRTotalQuantity = a.PRTotalQuantity,
                            PRCountpartPeople = a.PRCountpartPeople,
                            PRReturnAddress = a.PRReturnAddress,
                            PRDocumentNumber = a.PRDocumentNumber,
                            PRPeople = a.PRPeople,
                            PRReturnManner = a.PRReturnManner,
                            productLists = (from b in products
                                            join c in guan on b.ProductId equals c.ProductId
                                            where c.PurchaseReturnsCode == a.PurchaseReturnsCode
                                            select new ProductList
                                            {
                                                PNumber = b.PNumber,
                                                PName = b.PName,
                                                PSpec = b.PSpec,
                                                RPNum = c.RPNum,
                                                RefundAmoun = a.RefundAmoun,
                                                RPPrice = c.RPPrice,
                                                ProductId=b.ProductId
                                            }).ToList()


                        });
            return list.First();
        }

        /// <summary>
        /// 显示产品信息
        /// </summary>
        /// <param name="PName"></param>
        /// <param name="PNumber"></param>
        /// <param name="pindex"></param>
        /// <param name="psize"></param>
        /// <returns></returns>
        public async Task<dynamic> GetProductList(string? PName, string? PNumber, int pindex, int psize)
        {
            string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1MCIsInNpZCI6IjE4NjcwOTU3MzQ0NjIwNTg0OTYiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2dyb3Vwc2lkIjoiMTksMTkiLCJqdGkiOiI1MGYyMWRmZS0yNWQ3LTQ1OTQtOTg1Yi0wZTM2MDhhZjJiNmYiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoi5LuY5rSb5ZiJIiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvdXJpIjoiLyIsImlzcyI6IlJlbmFvYm8yMDA0IiwiYXVkIjoiV2VpZnV3dTIyMDNBIn0._wh23n1M7asMGST9NyeZj-5rk5ICAiOFv6yDk6e2o7Y";
            HttpClientWrapper cilent = new HttpClientWrapper(token);

            string chanpin = "http://116.205.121.197:8000/erpcp/api/Product/ProductShow?PName=" + PName + "&PNumber=" + PNumber + "&ProductTypeId=" + 0 + "&PageIndex=" + pindex + "&PageSize=" + psize;

            string postReponse = await cilent.GetAsync(chanpin);
            var json = JsonConvert.DeserializeObject<ApiResultList<Products>>(postReponse);
            return json.data.list;
        }


        //产品
        public class Products
        {
            /// <summary>
            /// 产品Id
            /// </summary>
            [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
            public int ProductId { get; set; }
            /// <summary>
            /// 标识
            /// </summary>

            public int? PCharacteristic { get; set; }
            /// <summary>
            /// 产品编号
            /// </summary>
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PNumber { get; set; }
            /// <summary>
            /// 产品名称
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PName { get; set; }
            /// <summary>
            /// 规格型号
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PSpec { get; set; }
            /// <summary>
            /// 单位
            /// </summary>
            /// 
            [SugarColumn(ColumnDataType = "Nvarchar(50)")]//设计长度
            public string? PUnit { get; set; }

            /// <summary>
            /// 产品分类ID
            /// </summary>

            public int ProductTypeId { get; set; }




        }


    }
}
